home *** CD-ROM | disk | FTP | other *** search
- (*===========================================================================*)
- (* Find window top line. This is the top line that is showing *)
- (* Get new window line. Returns buffer location *)
- (* *)
- (* Copyright 1988, 1989, 1991 by H. Roy Engehausen. All rights reserved. *)
- (* *)
- (*===========================================================================*)
-
- FUNCTION find_window_top_line : window_data_ptr;
-
- VAR
- i : INTEGER;
- w : window_data_ptr;
- l : window_data_ptr;
-
- BEGIN;
-
- {$IFDEF DEPTH}
- stack_depth;
- {$ENDIF}
-
- WITH window_array[current_window] DO
- BEGIN;
- w := window_line;
- i := window_location[window_loc].window_wl - 2;
- l := w^.last_line;
- WHILE (i > 0) AND (l <> NIL) DO
- BEGIN;
-
- {$IFDEF POINT_CHK}
- test_pointer(l);
- {$ENDIF}
-
- {$IFDEF LOOP_POINT_CHK}
- IF w = l THEN
- BEGIN;
- WRITELN('Window loop at find_top_line');
- dump_string('Wind loop at fine_top_line ' + p2x(w));
- dump_window(current_window);
- HALT;
- END;
- {$ENDIF}
-
- w := l;
- l := w^.last_line;
- i := i - 1;
-
- END;
- END;
-
- {$IFDEF LOOP_POINT_CHK}
- IF w = l THEN
- BEGIN;
- WRITELN('Window loop at find_top_line');
- dump_string('Wind loop at fine_top_line ' + p2x(w));
- dump_window(current_window);
- HALT;
- END;
- {$ENDIF}
-
- IF l <> NIL THEN
- find_window_top_line := l
- ELSE
- find_window_top_line := w;
-
- END;
-
- (*===========================================================================*)
- (* Get the next storage area for a window data line. If possible, *)
- (* reclaim it from the used area *)
- (*===========================================================================*)
-
- FUNCTION get_new_window_line : window_data_ptr;
- VAR
- l : window_data_ptr;
- w : window_data_ptr;
-
- BEGIN;
-
- {$IFDEF DEPTH}
- stack_depth;
- {$ENDIF}
-
- WITH window_array[current_window] DO
- BEGIN;
-
- IF (window_count < window_max_data) OR window_at_top THEN
- BEGIN;
- NEW(w);
- window_count := window_count + 1;
- get_new_window_line := w;
- EXIT;
- END;
-
- w := window_line;
- l := window_line^.last_line;
- WHILE l <> NIL DO
- BEGIN;
-
- {$IFDEF POINT_CHK}
- test_pointer(l);
- {$ENDIF}
-
- {$IFDEF LOOP_POINT_CHK}
- IF w = l THEN
- BEGIN;
- WRITELN('Window loop at get new');
- dump_string('Wind loop at get new' + p2x(w));
- dump_window(current_window);
- HALT;
- END;
- {$ENDIF}
-
- w := l;
- l := w^.last_line;
-
- END;
-
- {$IFDEF POINT_CHK}
- test_pointer(w);
- {$ENDIF}
-
- {$IFDEF LOOP_POINT_CHK}
- IF w = l THEN
- BEGIN;
- WRITELN('Window loop at get new');
- dump_string('Wind loop at get new' + p2x(w));
- dump_window(current_window);
- HALT;
- END;
- {$ENDIF}
-
- get_new_window_line := w;
- w := w^.next_line;
- w^.last_line := NIL;
-
- END;
-
- END;